From feca5a64e293cf21746d41527c31f26507765d0b Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Tue, 4 Dec 2001 17:12:35 +0000 Subject: [PATCH] Ref and sink priv->tooltips in init() and unref priv->tooltips in destroy Tue Dec 4 12:06:13 2001 Owen Taylor * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in init() and unref priv->tooltips in destroy rather than calling gtk_object_destroy() which has no effect on memory management. (#66104, HideToshi Tajima) * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() so we free the when the object is freed. (Fixes memory leak, #66096, HideToshi Tajima) * gdk/gdkevents.c (gdk_synthesize_window_state): Use a full GdkEvent structure to avoid reads of uninitialized/ invalid memory in gdk_event_put() (#65877, patch from Hidetoshi Tajima) --- ChangeLog | 17 +++++++++++++++++ ChangeLog.pre-2-0 | 17 +++++++++++++++++ ChangeLog.pre-2-10 | 17 +++++++++++++++++ ChangeLog.pre-2-2 | 17 +++++++++++++++++ ChangeLog.pre-2-4 | 17 +++++++++++++++++ ChangeLog.pre-2-6 | 17 +++++++++++++++++ ChangeLog.pre-2-8 | 17 +++++++++++++++++ gdk/gdkevents.c | 24 ++++++++++++------------ gtk/gtkcolorsel.c | 16 +++++----------- 9 files changed, 136 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index f89a9cb214..ceaf5210e9 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,20 @@ +Tue Dec 4 12:06:13 2001 Owen Taylor + + * gtk/gtkcolorsel.c: Ref and sink priv->tooltips in + init() and unref priv->tooltips in destroy rather + than calling gtk_object_destroy() which has no + effect on memory management. (#66104, HideToshi + Tajima) + + * gtk/gtkcolorsel.c (palette_set_color): Use g_object_set_data_full() + so we free the when the object is freed. (Fixes memory + leak, #66096, HideToshi Tajima) + + * gdk/gdkevents.c (gdk_synthesize_window_state): Use + a full GdkEvent structure to avoid reads of uninitialized/ + invalid memory in gdk_event_put() (#65877, patch + from Hidetoshi Tajima) + Tue Dec 4 11:06:54 2001 Owen Taylor * gtk/gtkmenuitem.c: Revert my last mistaken change - diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index fce4dbcbe3..137ef78e89 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -941,23 +941,23 @@ gdk_synthesize_window_state (GdkWindow *window, GdkWindowState unset_flags, GdkWindowState set_flags) { - GdkEventWindowState temp_event; + GdkEvent temp_event; GdkWindowState old; g_return_if_fail (window != NULL); - temp_event.window = window; - temp_event.type = GDK_WINDOW_STATE; - temp_event.send_event = FALSE; + temp_event.window_state.window = window; + temp_event.window_state.type = GDK_WINDOW_STATE; + temp_event.window_state.send_event = FALSE; - old = ((GdkWindowObject*) temp_event.window)->state; + old = ((GdkWindowObject*) temp_event.window_state.window)->state; - temp_event.changed_mask = (unset_flags | set_flags) ^ old; - temp_event.new_window_state = old; - temp_event.new_window_state |= set_flags; - temp_event.new_window_state &= ~unset_flags; + temp_event.window_state.changed_mask = (unset_flags | set_flags) ^ old; + temp_event.window_state.new_window_state = old; + temp_event.window_state.new_window_state |= set_flags; + temp_event.window_state.new_window_state &= ~unset_flags; - if (temp_event.new_window_state == old) + if (temp_event.window_state.new_window_state == old) return; /* No actual work to do, nothing changed. */ /* Actually update the field in GdkWindow, this is sort of an odd @@ -965,7 +965,7 @@ gdk_synthesize_window_state (GdkWindow *window, * inconsistent state to the user. */ - ((GdkWindowObject*) window)->state = temp_event.new_window_state; + ((GdkWindowObject*) window)->state = temp_event.window_state.new_window_state; /* We only really send the event to toplevels, since * all the window states don't apply to non-toplevels. @@ -977,7 +977,7 @@ gdk_synthesize_window_state (GdkWindow *window, case GDK_WINDOW_TOPLEVEL: case GDK_WINDOW_DIALOG: case GDK_WINDOW_TEMP: /* ? */ - gdk_event_put ((GdkEvent*) &temp_event); + gdk_event_put (&temp_event); break; case GDK_WINDOW_FOREIGN: diff --git a/gtk/gtkcolorsel.c b/gtk/gtkcolorsel.c index 14843ec4f9..c5b9b644f2 100644 --- a/gtk/gtkcolorsel.c +++ b/gtk/gtkcolorsel.c @@ -793,7 +793,6 @@ palette_set_color (GtkWidget *drawing_area, gdouble *color) { gdouble *new_color = g_new (double, 4); - gdouble *old_color; GdkColor gdk_color; gdk_color.red = UNSCALE (color[0]); @@ -823,20 +822,13 @@ palette_set_color (GtkWidget *drawing_area, gtk_object_set_data (GTK_OBJECT (drawing_area), "color_set", GINT_TO_POINTER (1)); } - else - { - old_color = (gdouble *) gtk_object_get_data (GTK_OBJECT (drawing_area), "color_val"); - if (old_color) - { - g_free (old_color); - } - } + new_color[0] = color[0]; new_color[1] = color[1]; new_color[2] = color[2]; new_color[3] = 1.0; - gtk_object_set_data (GTK_OBJECT (drawing_area), "color_val", new_color); + g_object_set_data_full (G_OBJECT (drawing_area), "color_val", new_color, (GDestroyNotify)g_free); } static gboolean @@ -1762,6 +1754,8 @@ gtk_color_selection_init (GtkColorSelection *colorsel) priv->default_alpha_set = FALSE; priv->tooltips = gtk_tooltips_new (); + g_object_ref (priv->tooltips); + gtk_object_sink (GTK_OBJECT (priv->tooltips)); gtk_box_set_spacing (GTK_BOX (colorsel), 4); top_hbox = gtk_hbox_new (FALSE, 8); @@ -1924,7 +1918,7 @@ gtk_color_selection_destroy (GtkObject *object) if (priv->tooltips) { - gtk_object_destroy (GTK_OBJECT (priv->tooltips)); + g_object_unref (priv->tooltips); priv->tooltips = NULL; } -- 2.30.2